gsk: Add gsk_texture_node_new()
authorBenjamin Otte <otte@redhat.com>
Sat, 10 Dec 2016 21:52:22 +0000 (22:52 +0100)
committerBenjamin Otte <otte@redhat.com>
Tue, 20 Dec 2016 17:01:09 +0000 (18:01 +0100)
Start the transition into the different node types.

docs/reference/gsk/gsk4-sections.txt
gsk/gskcairorenderer.c
gsk/gskglrenderer.c
gsk/gskrendernode.c
gsk/gskrendernode.h
gsk/gskrendernodeprivate.h
gsk/gskvulkanrenderpass.c
gtk/gtkrendericon.c

index 6518d1f5790863962cc9acff5c5f91fc7ca6eaf9..642a52de8a183dd1513f230a9882741bd4dcb375 100644 (file)
@@ -55,6 +55,7 @@ gsk_render_node_set_blend_mode
 GskScalingFilter
 gsk_render_node_set_scaling_filters
 gsk_render_node_set_name
+gsk_texture_node_new
 <SUBSECTION Standard>
 GSK_IS_RENDER_NODE
 GSK_RENDER_NODE
index 7e96052f20cc126fe049dbfe5734030e4087edeb..5a31814eecbda8bb5047ea290eb829f41a8eb970 100644 (file)
@@ -101,7 +101,7 @@ gsk_cairo_renderer_render_node (GskCairoRenderer *self,
                             frame.origin.x, frame.origin.y));
   if (gsk_render_node_has_texture (node))
     {
-      GskTexture *texture = gsk_render_node_get_texture (node);
+      GskTexture *texture = gsk_texture_node_get_texture (node);
       cairo_surface_t *surface = gsk_texture_download (texture);
 
       cairo_set_source_surface (cr, surface, frame.origin.x, frame.origin.y); 
index f8524ee9515c003d39c03246bedc2f155eadccd6..b533cbd00e2d73176bfbe7b2bbdc4a9f1fccb375 100644 (file)
@@ -721,7 +721,7 @@ gsk_gl_renderer_add_render_item (GskGLRenderer           *self,
 
   if (gsk_render_node_has_texture (node))
     {
-      GskTexture *texture = gsk_render_node_get_texture (node);
+      GskTexture *texture = gsk_texture_node_get_texture (node);
       int gl_min_filter = GL_NEAREST, gl_mag_filter = GL_NEAREST;
 
       get_gl_scaling_filters (node, &gl_min_filter, &gl_mag_filter);
index aced1e42ea551688bf5ed72fa67509d2ce1ed8e3..c9568c43b9f72824059dd25cd835d1c4bc7e9685 100644 (file)
@@ -768,6 +768,7 @@ gsk_render_node_set_bounds (GskRenderNode         *node,
 {
   g_return_if_fail (GSK_IS_RENDER_NODE (node));
   g_return_if_fail (node->is_mutable);
+  g_return_if_fail (node->type == GSK_CONTAINER_NODE);
 
   if (bounds == NULL)
     graphene_rect_init_from_rect (&node->bounds, graphene_rect_zero ());
@@ -1041,38 +1042,41 @@ gsk_render_node_has_texture (GskRenderNode *node)
 }
 
 GskTexture *
-gsk_render_node_get_texture (GskRenderNode *node)
+gsk_texture_node_get_texture (GskRenderNode *node)
 {
   g_return_val_if_fail (GSK_IS_RENDER_NODE (node), 0);
+  g_return_val_if_fail (node->type == GSK_TEXTURE_NODE, 0);
 
   return node->texture;
 }
 
 /**
- * gsk_render_node_set_texture:
- * @node: a #GskRenderNode
+ * gsk_texture_node_new:
  * @texture: the #GskTexture
+ * @bounds: the rectangle to render the texture into
+ *
+ * Creates a #GskRenderNode that will render the given
+ * @texture into the area given by @bounds.
  *
- * Associates a #GskTexture to a #GskRenderNode.
+ * Returns: A new #GskRenderNode
  *
  * Since: 3.90
  */
-void
-gsk_render_node_set_texture (GskRenderNode *node,
-                             GskTexture    *texture)
+GskRenderNode *
+gsk_texture_node_new (GskTexture            *texture,
+                      const graphene_rect_t *bounds)
 {
-  g_return_if_fail (GSK_IS_RENDER_NODE (node));
+  GskRenderNode *node;
 
-  if (node->texture == texture)
-    return;
+  g_return_val_if_fail (GSK_IS_TEXTURE (texture), NULL);
+  g_return_val_if_fail (bounds != NULL, NULL);
 
-  if (node->texture)
-    gsk_texture_unref (node->texture);
+  node = gsk_render_node_new (GSK_TEXTURE_NODE);
 
-  node->texture = texture;
+  node->texture = gsk_texture_ref (texture);
+  graphene_rect_init_from_rect (&node->bounds, bounds);
 
-  if (texture)
-    gsk_texture_ref (texture);
+  return node;
 }
 
 /*< private >
index 5af118bedc8f0f0b7a4c62f6e04eadc079f383d7..c724ad298c5a81e835491ebf27629dabb40b78dd 100644 (file)
@@ -44,6 +44,10 @@ void                    gsk_render_node_unref                   (GskRenderNode *
 GDK_AVAILABLE_IN_3_90
 GskRenderNodeType       gsk_render_node_get_node_type           (GskRenderNode *node);
 
+GDK_AVAILABLE_IN_3_90
+GskRenderNode *         gsk_texture_node_new                    (GskTexture               *texture,
+                                                                 const graphene_rect_t    *bounds);
+
 GDK_AVAILABLE_IN_3_90
 GskRenderNode *         gsk_render_node_get_parent              (GskRenderNode *node);
 GDK_AVAILABLE_IN_3_90
@@ -110,9 +114,7 @@ cairo_t *               gsk_render_node_get_draw_context        (GskRenderNode *
 GDK_AVAILABLE_IN_3_90
 void                    gsk_render_node_set_blend_mode          (GskRenderNode *node,
                                                                  GskBlendMode   blend_mode);
-GDK_AVAILABLE_IN_3_90
-void                    gsk_render_node_set_texture             (GskRenderNode *node,
-                                                                 GskTexture    *texture);
+
 GDK_AVAILABLE_IN_3_90
 void                    gsk_render_node_set_scaling_filter      (GskRenderNode *node,
                                                                  GskScalingFilter min_filter,
index 6307989329ecdf6a86884bf9f87a6bf7964afba1..c70ef62476ed1d7befcc9f374c466be5c6cf5c96 100644 (file)
@@ -71,7 +71,7 @@ double gsk_render_node_get_opacity (GskRenderNode *node);
 
 cairo_surface_t *gsk_render_node_get_surface (GskRenderNode *node);
 
-GskTexture *gsk_render_node_get_texture (GskRenderNode *node);
+GskTexture *gsk_texture_node_get_texture (GskRenderNode *node);
 
 gboolean gsk_render_node_has_surface (GskRenderNode *node);
 gboolean gsk_render_node_has_texture (GskRenderNode *node);
index 892e9690aaca53713278d2b878214f6e05667f00..e5c64ccc956c2b5b7c926b691c2b43a8a6ab3d4c 100644 (file)
@@ -168,7 +168,7 @@ gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self,
         case GSK_VULKAN_OP_TEXTURE:
           {
             op->source = gsk_vulkan_renderer_ref_texture_image (GSK_VULKAN_RENDERER (gsk_vulkan_render_get_renderer (render)),
-                                                                gsk_render_node_get_texture (op->node),
+                                                                gsk_texture_node_get_texture (op->node),
                                                                 command_buffer);
             gsk_vulkan_render_add_cleanup_image (render, op->source);
           }
index b20b743903293cb0335dba316ac99f07521caed1..409e940988da430d183e6b0968ddc03d14096339 100644 (file)
@@ -283,13 +283,14 @@ gtk_css_style_snapshot_icon_texture (GtkCssStyle *style,
 
   graphene_rect_init (&bounds, 0, 0, gsk_texture_get_width (texture), gsk_texture_get_height (texture));
 
-  node = gtk_snapshot_append (snapshot, &bounds, "Icon");
+  node = gsk_texture_node_new (texture, &bounds);
+  gsk_render_node_set_name (node, "Icon");
+  gtk_snapshot_append_node (snapshot, node);
   if (!_gtk_css_shadows_value_is_none (shadows) && !shadow_warning)
     {
       g_warning ("Painting shadows not implemented for textures yet.");
       shadow_warning = TRUE;
     }
-  gsk_render_node_set_texture (node, texture);
   gsk_render_node_unref (node);
 
   gtk_snapshot_set_transform (snapshot, &saved_matrix);